package Busquedas;


/**
 * Clase que representa el estado de un problema.
 * Dicho estado viene caracterizado por su numero de par�metros y el contenido de �stos.

 */
public class Estado {
	
	private int numParametros;
	
	private int[] parametros;
	
	
	/**
	 * Constructor de clase.
	 * @param parametros lista con lso par�metros del estado-
	 */
	public Estado(int[] parametros){
		this.numParametros = parametros.length;
		this.parametros = parametros;
	}
	
	
	
	/**
	 * Constructor de copia
	 * @param otro estado que queremos copiar.
	 */
	public Estado(Estado otro){
		this.numParametros = otro.getNumParametros();
		for (int i = 0; i < numParametros; i++){
			parametros[i] = otro.getParametro(i);
		}
	}

	
	/**
	 * getter del numero de parametros
	 * @return numero de parametros
	 */
	public int getNumParametros() {
		return numParametros;
	}

	
	/**
	 * Setter del numero de parametros
	 * @param numParametros numero de parametros que queremos asignar
	 */
	public void setNumParametros(int numParametros) {
		this.numParametros = numParametros;
	}

	
	/**
	 * cambia el estado por otro
	 * @param otro estado al que queremos cambiar
	 */
	public void cambiaEstado(Estado otro) {
		for (int i = 0; i < numParametros; i++){
			parametros[i] = otro.getParametro(i);
		}
	}
	
	
	/**
	 * Accede a uno de los parametros del estado
	 * @param i posicio a la que queremos acceder
	 * @return entero de la posici�n requerida.
	 */
	public int getParametro(int i){
		if (i >= 0 && i < numParametros)
			return parametros[i];
		return -1;
	}
	
	
	/**
	 * Asigna un valor a un parametro.
	 * @param i posicion del parametro
	 * @param valor valor deseado.
	 */
	public void setParametro(int i,int valor){
		if (i >= 0 && i < numParametros){
			parametros[i] = valor;
		}
	}
	
	
	
	/**
	 * @param otro estado con el que comparamos
	 * @return booleano diciendo si es igual que dicho estado.
	 */
	public boolean esIgual(Estado otro){
		boolean igual = true;
		int i = 0;
		while (igual && i < this.parametros.length){
			igual = otro.getParametro(i) == this.parametros[i];
			i++;
		}
		return igual;
	}
	
	
	
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	public String toString()
	{
		String s="(";
		for (int i=0;i<numParametros;i++){
			if (i == numParametros-1)
				s += parametros[i];
			else
				s+=parametros[i]+",";
		}
		s += ")";
		return s;
	
	}

	
	
	/**
	 * getter de parametros
	 * @return lista de parametros
	 */
	public int[] getParametros() {
		return parametros;
	}

	
	
	/**
	 * setter de parametros
	 * @param parametros lista de parametros a asignar.
	 */
	public void setParametros(int[] parametros) {
		this.parametros = parametros;
	}
}
